package com.demo.java.OD151_200.OD178;

import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【内存资源分配&内存池】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145858622
 */
public class OdMain {

    public static void main(String[] args) {
        try (Scanner sc = new Scanner(System.in)) {
            // 读取存储池的输入并分割为数组
            String[] input = sc.nextLine().split(",");
            String[] apply = sc.nextLine().split(",");

            // 存储资源池的类型和数量映射
            List<Integer> exist = new ArrayList<>();
            Map<Integer, Integer> map = new HashMap<>();

            // 解析存储池信息
            for (String s : input) {
                String[] typeCount = s.split(":");
                int type = Integer.parseInt(typeCount[0]);
                exist.add(type);
                map.put(type, Integer.parseInt(typeCount[1]));
            }

            // 按照存储池容量升序排序
            Collections.sort(exist);

            // 处理每个申请需求
            Arrays.stream(apply)
                    .map(Integer::parseInt) // 将需求转化为整数
                    .forEach(need -> {
                        // 检查是否可以分配
                        boolean flag = exist.stream()
                                .filter(e -> e >= need) // 找到大于等于需求的最小存储池
                                .findFirst() // 获取第一个满足条件的存储池
                                .map(e -> {
                                    // 扣除资源并更新存储池数量
                                    int pool = map.merge(e, -1, Integer::sum);
                                    if (pool == 0) exist.remove(Integer.valueOf(e)); // 若资源池空了，则移除
                                    return true; // 成功分配
                                })
                                .orElse(false); // 若没有满足条件的池，返回失败

                        // 输出每个需求的分配结果
                        System.out.print(flag + " ");
                    });

            // 输出换行符，结束结果输出
            System.out.println();
        }
    }
}